﻿// Study1008.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
// 第十章 STL和泛型设计 优先队列适配器

#include <iostream>
#include <queue>
#include <cstdlib>
#include <ctime>
using namespace std;

const int SPLIT_TIME_MIN = 500;
const int SPLIT_TIME_MAX = 2000;
class Cell;
priority_queue<Cell> cellQueue;

class Cell
{
public:
    Cell(int birth):id(++count)
    {
        time = birth + (rand() % (SPLIT_TIME_MAX - SPLIT_TIME_MIN)) + SPLIT_TIME_MIN;

    }
    int getId() const
    {
	    return id;
    }
    int getSplitTime() const
    {
        return time;
    }
    bool operator <(const Cell& s)const
    {
        return time > s.time;
    }
    void split() const
    {
        Cell child1(time), child2(time);
        cout << time << "s: Cell #" << id << " splits to #" << child1.getId() << " and #" << child2.getId() << endl;
        cellQueue.push(child1);
        cellQueue.push(child2);

    }
private:
    static int count;
    int id;
    int time;
};
int Cell::count = 0;
int main()
{
    srand(static_cast<unsigned>(time(0)));
    int t;
    cout << "Simulation time: ";
    cin >> t;
    cellQueue.push(Cell(0));
    while (cellQueue.top().getSplitTime()<=t)
    {
        cellQueue.top().split();
        cellQueue.pop();
    }

    return 0;
}


